package com.wdc.deliveryrobot.activity;


import android.content.Intent;
import android.graphics.Color;
import android.icu.text.LocaleDisplayNames;
import android.nfc.Tag;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.sirui.selfstudysdk.main.SelfChassisState;
import com.wdc.deliveryrobot.R;
import com.wdc.deliveryrobot.Sp.SPManager;
import com.wdc.deliveryrobot.adapter.LocationAdapter;
import com.wdc.deliveryrobot.adapter.MapAdapter;
import com.wdc.deliveryrobot.adapter.PointListAdapter;
import com.wdc.deliveryrobot.decoration.SpaceItemDecoration;
import com.wdc.deliveryrobot.dialog.AddPointDialog;
import com.wdc.deliveryrobot.dialog.HintDialog;
import com.wdc.deliveryrobot.event.Event;
import com.wdc.deliveryrobot.model.Point;
import com.wdc.deliveryrobot.model.PointLocation;
import com.wdc.deliveryrobot.view.MapOneView;
import com.wdc.deliveryrobot.view.MapView;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.lang.reflect.Type;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Spliterator;
import java.util.concurrent.BlockingDeque;


public class MapActivity extends AppCompatActivity {

    private WebView webView;

    private LinearLayout linearLayout;

    private FrameLayout frameLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        frameLayout = findViewById(R.id.webView);
        linearLayout = findViewById(R.id.return_back);
        if (webView == null){
            webView = new WebView(getApplicationContext());
            webView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
            frameLayout.addView(webView);
        }

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        //防止打开外部浏览器
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                Log.e("WebViewError", "Error loading URL: " + error.toString());
            }

        });


        webView.loadUrl("http://192.168.31.7:9999/#/pages/deploy/map");

        linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 销毁 WebView 资源
        if (webView!= null) {
            frameLayout.removeView(webView);
            webView.clearHistory();
            webView.clearCache(true);
            webView.loadUrl("about:blank");
            webView.onPause();
            webView.removeAllViews();
            webView.destroy();
            webView = null;
        }
    }

    //    private Button buttonCreate;
//
//    private TextView textViewMapName,textViewMapSimilarity,textViewMapFloor,textViewMapCharging;
//
//    private ImageView imageView,imageViewPoint,imageViewMap,imageViewBig,imageViewSmall,imageViewReset;
//
//    private JSONArray jsonArrayPoint;
//
//    private HintDialog hintDialog;
//
//    private MapOneView mapView;
//    private SPManager spManager;
//
//    private PointListAdapter.OnItemClickListener listener;
//
//    private LinearLayout linearLayoutAdd,linearLayoutPoint,linearLayoutExit,linearLayoutPointList,linearLayoutRelocation;
//
//
//    private boolean pointListShow = false;
//    private DrawerLayout drawerLayout;
//
//    private RecyclerView recyclerView;
//
//    private Integer isStatue = -1;
//
//    private Gson gson;
//
//    private Handler handler = new Handler(Looper.getMainLooper()); // 确保在主线程中更新
//
//    private Runnable runnable = new Runnable() {
//        @Override
//        public void run() {
//            new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    if (selfChassisState == null) {
//                        Log.e("MapActivity", "selfChassisState is null");
//                        return; // 或者适当处理
//                    }
//
//                    try {
//                        JSONObject jsonObjectStations = selfChassisState.getStations();
//                        jsonArrayPoint = jsonObjectStations.getJSONArray("point");
//                        if (jsonArrayPoint != null){
//                            for (int i = jsonArrayPoint.size() - 1; i >= 0; i--) {
//                                if (!jsonArrayPoint.getJSONObject(i).getString("mapName").equals(selfChassisState.getMapName())) {
//                                    jsonArrayPoint.remove(i);
//                                }
//                            }
//                        }
//
//                        // 确保在主线程中更新 UI
//                        handler.post(new Runnable() {
//                            @Override
//                            public void run() {
//                                // 更新 UI
//                                textViewMapName.setText(selfChassisState.getMapName().replace(".yaml", ""));
////                                if (jsonArrayPoint != null && jsonArrayPoint.size() > 0) {
////                                    textViewMapFloor.setText(jsonArrayPoint.getJSONObject(0).getString("floor"));
////                                }
//                                textViewMapFloor.setText(selfChassisState.getFloor() == null ? " " : selfChassisState.getFloor().toString());
//                                imageView.setImageResource(selfChassisState.isStop() ? R.drawable.pointred : R.drawable.pointgreed);
//                                textViewMapCharging.setText(selfChassisState.getQuantity()  == null ? " " : selfChassisState.getQuantity() + "%");
//                                DecimalFormat df = new DecimalFormat("#.00");
//                                textViewMapSimilarity.setText(df.format(selfChassisState.getConfidenceCoefficient() * 100) + "%");
//
//
//                            }
//                        });
//                    } catch (Exception e) {
//                        Log.e("DeliveryFragment", "Error in runnable", e);
//                    }
//                }
//            }).start();
//            //mapView.setLaserData(selfChassisState.getMapData(), selfChassisState.getChargingPosition(), jsonArrayPoint, selfChassisState.scan);
//            handler.postDelayed(this, 1000); // 递归调用
//        }
//    };
//
//    private Runnable mapRunnable = new Runnable() {
//        @Override
//        public void run() {
//            JSONObject jsonObjectScan = selfChassisState.scan;
//            mapView.setLaserData(jsonObjectScan);
//            handler.postDelayed(mapRunnable,1000);
//        }
//    };
//
//
//
//    private static String TAG = "mapActivity";
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_map);
//        setSystemUiVisibility(true);
//        init();
//        listener = this;
//
//        handler.post(runnable);
//        handler.post(mapRunnable);
//    }
//
//    private void init() {
//        buttonCreate = findViewById(R.id.create_map);
//        textViewMapName = findViewById(R.id.map_name);
//        textViewMapFloor = findViewById(R.id.map_floor);
//        textViewMapSimilarity = findViewById(R.id.map_similarity);
//        textViewMapCharging = findViewById(R.id.map_charging);
//        mapView = findViewById(R.id.mapView);
//        mapView.setBackgroundColor(Color.LTGRAY);
//        imageView = findViewById(R.id.map_stop);
//        linearLayoutAdd = findViewById(R.id.addPoint);
//        linearLayoutPoint = findViewById(R.id.pointList);
//        linearLayoutRelocation = findViewById(R.id.relocation);
//        linearLayoutExit = findViewById(R.id.exit);
//        imageViewPoint = findViewById(R.id.point_list);
//        imageViewMap = findViewById(R.id.map_list);
//        imageViewReset = findViewById(R.id.button_reset);
//        imageViewSmall = findViewById(R.id.button_minimize);
//        imageViewBig = findViewById(R.id.button_magnify);
//        linearLayoutPointList = findViewById(R.id.drawer1);
//        drawerLayout = findViewById(R.id.drawer_layout);
//        recyclerView = findViewById(R.id.pointRecyclerView);
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));
//        recyclerView.addItemDecoration(new SpaceItemDecoration(15));
//
//        //禁止滑动或者点击关闭打开抽屉
//        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
//        // 添加抽屉监听器
//        drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
//            @Override
//            public void onDrawerSlide(View drawerView, float slideOffset) {
//                // 禁用滑动操作
//            }
//
//            @Override
//            public void onDrawerOpened(View drawerView) {
//                // 可以做些额外的操作
//                if (drawerView == linearLayoutPointList){
//                    // 隐藏状态栏和导航栏
//                    setSystemUiVisibility(true);
//                    Log.d("thd_","打开");
//                    List<Point> points = new ArrayList<>();
//                    JSONObject jsonObjectStations = selfChassisState.getStations();
//                    JSONArray jsonArrayPoint = jsonObjectStations.getJSONArray("point");
//                    if (jsonArrayPoint != null){
//                        for (int i = jsonArrayPoint.size() - 1;i >= 0;i --){
//                            if (!jsonArrayPoint.getJSONObject(i).getString("mapName").equals(selfChassisState.getMapName())){
//                                jsonArrayPoint.remove(i);
//                            }
//                        }
//                    }
//                    if (jsonArrayPoint != null){
//                        Gson gson = new Gson();
//                        Type listType = new TypeToken<List<Point>>(){}.getType();  // 创建 TypeToken 类型，用于获取 List<Point> 的类型信息
//                        points = gson.fromJson(jsonArrayPoint.toString(), listType);
//                    }
//
//                    PointListAdapter pointListAdapter = new PointListAdapter(getApplicationContext(),points,selfChassisState,listener);
//                    recyclerView.setAdapter(pointListAdapter);
//                }
//            }
//
//            @Override
//            public void onDrawerClosed(View drawerView) {
//                // 可以做些额外的操作
//                imageViewPoint.setImageResource(R.drawable.pointlist);
//                pointListShow = false;
//            }
//
//            @Override
//            public void onDrawerStateChanged(int newState) {
//                // 监听状态变化
//            }
//        });
//
//
//        gson = new Gson();
//        //设置固定数据
//        setData();
//
//        buttonCreate.setOnClickListener(this);
//        linearLayoutAdd.setOnClickListener(this);
//        linearLayoutPoint.setOnClickListener(this);
//        linearLayoutExit.setOnClickListener(this);
//        linearLayoutRelocation.setOnClickListener(this);
//        imageViewBig.setOnClickListener(this);
//        imageViewSmall.setOnClickListener(this);
//        imageViewReset.setOnClickListener(this);
//
//
//
//    }
//
//
//    @Override
//    public void onClick(View view) {
//        switch (view.getId()){
//            case R.id.create_map:
//                if (hintDialog == null || !hintDialog.isShowing()) { // 检查对话框状态
//                    hintDialog = new HintDialog(MapActivity.this);
//                    hintDialog.setMessage(getString(R.string.ok_create_map));
//                    hintDialog.setOkButtonClickListener(new View.OnClickListener() {
//                        @Override
//                        public void onClick(View view) {
////                            Toast.makeText(getApplicationContext(), "新建地图咯", Toast.LENGTH_SHORT).show();
//                            Log.d(TAG,"打开地图");
//                            Intent intent = new Intent(MapActivity.this, DrawActivity.class);
//                            startActivity(intent);
//                        }
//                    });
//                    hintDialog.setCancelButtonClickListener(new View.OnClickListener() {
//                        @Override
//                        public void onClick(View view) {
//                            hintDialog.dismiss();
//                        }
//                    });
//                    hintDialog.show();
//                }
//                break;
//            case R.id.addPoint:
//                AddPointDialog addPointDialog = new AddPointDialog(this);
//                addPointDialog.mapSet();
//                addPointDialog.setWidth(500,600);
//                addPointDialog.setOkButtonClickListener(new View.OnClickListener() {
//                    @Override
//                    public void onClick(View view) {
//                        if (addPointDialog.isEditNull() || addPointDialog.isCheck().equals(-1)){
//                            Toast.makeText(getApplicationContext(),getString(R.string.pointSet),Toast.LENGTH_SHORT).show();
//                        }else {
//                            boolean isTure = false;
//                            String name = addPointDialog.getEditText();
//                            for (int i = jsonArrayPoint.size() - 1;i >= 0;i --){
//                                if (jsonArrayPoint.getJSONObject(i).getString("name").equals(name)) {
//                                    Toast.makeText(getApplicationContext(),getString(R.string.pointNow),Toast.LENGTH_SHORT).show();
//                                    isTure = true;
//                                    break;
//                                }
//                            }
//                            if (!isTure){
//
//                                //生成一个新的点位
//                                Point point = new Point(String.format("%.3f", selfChassisState.getYaw()),String.format("%.3f", selfChassisState.getX()),String.format("%.3f", selfChassisState.getY()),
//                                        selfChassisState.getMapName(),selfChassisState.getFloor() == null ? null : selfChassisState.getFloor().toString(),name,addPointDialog.isCheck());
//
//                                //获取最新点位  进行添加
//                                JSONObject jsonObjectStations = selfChassisState.getStations();
//                                JSONArray jsonArrayPoints = jsonObjectStations.getJSONArray("point");
//                                jsonArrayPoints.add(point);
//                                //覆盖原有数据
//                                jsonObjectStations.put("point",jsonArrayPoints);
//                                selfChassisState.writeConfiguration(jsonObjectStations);
//                                selfChassisState.readConfiguration();
//                                addPointDialog.dismiss();
//
//                                Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_SHORT).show();
//                                //重新更新数据
//                                setData();
//                            }
//
//                        }
//                    }
//                });
//                addPointDialog.show();
//                break;
//            case R.id.button_reset:
//                mapView.reset();
//                break;
//            case R.id.button_magnify:
//                mapView.zoomIn();
//                //放大
//                break;
//            case R.id.button_minimize:
//                mapView.zoomOut();
//                //缩小
//                break;
//            case R.id.exit:
//                finish();
//                break;
//            case R.id.pointList:
//                if (!pointListShow){
//                    imageViewPoint.setImageResource(R.drawable.pointlisting);
//                    Log.d("thd_","显示点位列表");
//                    drawerLayout.openDrawer(linearLayoutPointList);
//                    pointListShow = true;
//                }else {
//                    imageViewPoint.setImageResource(R.drawable.pointlist);
//                    pointListShow = false;
//                }
//                break;
//            case R.id.relocation:
//                //重定位
//                break;
//        }
//    }
//
//
//    // 用于设置系统 UI 可见性，隐藏状态栏和导航栏
//    private void setSystemUiVisibility(boolean isFullscreen) {
//        View decorView = getWindow().getDecorView();
//        if (isFullscreen) {
//            // 隐藏状态栏和导航栏
//            int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN
//                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
//                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
//            decorView.setSystemUiVisibility(uiOptions);
//        }
//    }
//
//    @Override
//    protected void onResume() {
//        super.onResume();
//        setSystemUiVisibility(true);
//    }
//
//
//
//
//    @Override
//    public void onItemClick(Point location,Integer type) {
//        if (type.equals(1)){
//            //删除
//            JSONObject jsonObjectStations = selfChassisState.getStations();
//            JSONArray jsonArrayPoints = jsonObjectStations.getJSONArray("point");
//            //获取到已经存在的点位 进行判断 删除
//            String mapName = selfChassisState.getMapName();
//            if (jsonArrayPoints != null && jsonArrayPoints.size() > 0){
//                for (int i = 0;i < jsonArrayPoints.size();i ++){
//                    Log.d("thd_","点位数据:" + jsonArrayPoints.getJSONObject(i));
//                    if (jsonArrayPoints.getJSONObject(i).getString("name").equals(location.getName())){
//                        jsonArrayPoints.remove(i);
//                        break;
//                    }
//                }
//            }
//            //覆盖原有数据
//            jsonObjectStations.put("point",jsonArrayPoints);
//            selfChassisState.writeConfiguration(jsonObjectStations);
//            selfChassisState.readConfiguration();
//            drawerLayout.closeDrawer(linearLayoutPointList);
//
//        }else {
//            //导航
//            if (selfChassisState.isStop()){
//                Toast.makeText(getApplicationContext(),getString(R.string.stoping),Toast.LENGTH_SHORT).show();
//            }else {
//                //开始导航
//                isStatue = 1;
//                Log.d("thd_","出发");
//                selfChassisState.linePatrolNaxvigation(location.getX(),location.getY(),location.getYaw());
//                //关闭列表
//                drawerLayout.closeDrawer(linearLayoutPointList);
//            }
//        }
//    }
//
//    @Subscribe(threadMode = ThreadMode.MAIN)
//    public void OnDataEvent(Event.OnDataEvent onDataEvent){
//        if (isStatue.equals(1)){
//            boolean fistSay = false;
//            //运行判断
//            if (onDataEvent.statue.equals(0) && !fistSay){
//                Log.d("thd_","我出发了");
//                fistSay = true;
//            }else if (onDataEvent.statue.equals(1)){
//                Log.d("thd_","我到达了");
//                isStatue = -1;
//            }
//        }
//    }
//
//    public void setData(){
//        //设置固定数据
//        JSONObject jsonObjectStations = selfChassisState.getStations();
//        JSONArray jsonArrayPoint = jsonObjectStations.getJSONArray("point");
//        if (jsonArrayPoint != null){
//            for (int i = jsonArrayPoint.size() - 1;i >= 0;i --){
//                if (!jsonArrayPoint.getJSONObject(i).getString("mapName").equals(selfChassisState.getMapName())){
//                    jsonArrayPoint.remove(i);
//                }
//            }
//        }
//
//        mapView.setData(selfChassisState.getMapData(),mapView.getWidth(),mapView.getHeight(),selfChassisState.getChargingPosition(),jsonArrayPoint);
//    }

}